#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
/*
    pthread_create(&tid, NULL, my_thread, NULL)：
        创建一个线程
        参数1：获取线程id
        参数2：线程属性，一般NULL
        参数3：线程服务函数void*(*pthread_fun)(void*)类型的函数指针
        参数4：线程服务函数传参
    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL)：
        线程可以被取消属性设置
    pthread_cancel(tid)：
        取消指定id的线程

    pthread_detach(pthread_self()):
        设置分离属性，每个线程基本上都用这个
    pthread_join(tid, (void**)&p)：
        主进程调用，指定等待一个线程回收资源,阻塞的
        一般设置分离属性，可以不用这个
    pthread_exit(&a)：
        进程退出，并返回退出码
        退出码可以是全局变量，静态局部变量，malloc的变量的地址
        但不可以是临时变量的地址，要有迹可循

*/
void* my_thread(void* arg)
{
    pthread_detach(pthread_self());//分离属性，资源会被自动释放
    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);//取消属性

    while (1)
    {
        sleep(1);
        printf("xxx\n");
        static int a = 1;
        pthread_exit(&a);//线程退出
    }
}

int main()
{
    pthread_t tid;
    int ret = pthread_create(&tid, NULL, my_thread, NULL);
    if (ret == -1)
    {
        perror("create tid error");
        return -1;
    }
    // sleep(1);
    // pthread_cancel(tid);//执行1s之后，干掉该线程

    // int* p = NULL;
    // pthread_join(tid, (void**)&p);//等待线程退出，释放资源

    while (1)
    {
    }
}